package com.jhonatan.sitcom;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import com.jhonatan.sitcom.util.DBHelper;
import com.jhonatan.sitcom.util.DataBaseManager;
import com.jhonatan.sitcom.util.Global;
import com.jhonatan.sitcom.util.PhpPost;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.database.Cursor;


public class MainActivity extends Activity implements View.OnClickListener {
    Button btn;
    ProgressDialog pDialog;
    Intent siguiente;
    DBHelper helper;
    SQLiteDatabase db;
    Context context;
    EditText etUser;
	EditText etPass;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button) findViewById(R.id.btnEntrar);
        btn.setOnClickListener(this);    	
        etUser = (EditText) findViewById(R.id.txtUser);
    	etPass = (EditText) findViewById(R.id.txtPass);
    	context=this;
        helper = new DBHelper(context);//En esta base de datos vamos a guardar la session       
        
		Verificacion tarea1 = new Verificacion();      
		tarea1.execute();
		
    }
    
	@SuppressWarnings("static-access")
	private boolean intentosFecha(){
    	
    	SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    	DataBaseManager manager = new DataBaseManager(context);
    	Date hoy;
    	Date UT;
    	//String stringDate= formatter.format(hoy.getTime());
    	
    	Cursor c = manager.leer("UtIntento");		
		System.out.println("## intentos procesando");
		
		if(c.getCount()!=0){			
			c.moveToLast();
			try {//UT fecha del Ultimo intento				 
				 UT = formatter.parse(c.getString(c.getColumnIndex(manager.CN_VALUE)));
				 Calendar now= Calendar.getInstance();
				 hoy = now.getTime();	
				 System.out.println("##UT:"+ c.getString(c.getColumnIndex(manager.CN_VALUE)));
				// System.out.println("##hoy:"+ hoy.toString());
				 formatter.format(UT);						
			} catch (ParseException e) {
				e.printStackTrace();
				System.out.println("##Fecha error parse false");
				return false;
			}				
			if(UT.compareTo(hoy)<0){
				System.out.println("##Fecha UT<hoy true");
				return true;
			}else{
				System.out.println("##Fecha UT >hoy false");
				return false;
			}			
		}else{
			System.out.println("##Fecha count 0 true");
			return true;
		}
    	    	
    }

	 int intentosCantidad(){
     	DataBaseManager manager = new DataBaseManager(context);
     	Cursor c = manager.leer("cantIntentos");
     	
     	if(c.getCount()!=0){
     		@SuppressWarnings("static-access")
				int inValue= c.getColumnIndex(manager.CN_VALUE);
     		c.moveToLast();        		        		
     		String cantString = c.getString(inValue);
     		int cant = Integer.parseInt(cantString);
     		System.out.println("##Cantidad " + cant);
				return cant;
     	}
     	System.out.println("##Cantidad 0");
     	return 0;
     }
    @Override
    public void onClick(View v) {        
        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        pDialog.setMessage("Procesando...");
        pDialog.setCancelable(true);
        pDialog.setMax(100);

     Logeo tarea2 = new Logeo();
        tarea2.execute();
  
    }

    private class Logeo extends AsyncTask<Void, Integer, Boolean> {
    		String mensaje;
        @Override
        protected Boolean doInBackground(Void... params) {
        	
        	String pass = etPass.getText().toString();
        	String user =  etUser.getText().toString();
        	if(!pass.equals("")&&!user.equals("")){
        		
        	   	if(intentosFecha() &&  intentosCantidad()<3){
		        	
		    		String url =new Global().getBaseUrl() +"index.php/android/iniciar_session"; //verifica las credenciales
		    		String url2 =new Global().getBaseUrl() +"index.php/android/getSession";  //obtiene los datos de logueo
		    		PhpPost phppost= new PhpPost();
		    		List<NameValuePair> parames = new ArrayList<NameValuePair>();
		    		parames.add(new BasicNameValuePair("user",user));
		    		parames.add(new BasicNameValuePair("pass",pass));
			    	try{
			    		String r=phppost.post(url,parames);
			    		if(Integer.parseInt(r)==2){
			    			////Si no existe el registro lo insertamos
			    		
			    			DataBaseManager manager = new DataBaseManager(context);
			    				manager.insertOrUpdate("userStatus", "1");
			    				manager.eliminar("cantIntentos");
			    				manager.eliminar("UtIntento");
			    				String r2=phppost.post(url2,parames);
			    				manager.insertOrUpdate("id_usuario", r2);
				    			mensaje="Iniciando sesion";
			    				return true;
			    		}else{
			    			
			    			mensaje="Datos incorrectos o permisos no concedidos ";
			    			DataBaseManager manager = new DataBaseManager(context);
		    				manager.intentos();
			    			return false;
			    		}
			    	}catch(Exception e){
			    		mensaje="Error de Conexion";
			    		return false;
			    		
			    	}
		        }else{
		        	mensaje="Sistema Bloqueado";

		        	
		        	return false;
	        }
        	}else{
	        	mensaje="Por favor llene todos los campos";
	        	return false;
        }
        	//mensaje="No entro en ningun lugar";
        	//return false;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            int progreso = values[0].intValue();

            pDialog.setProgress(progreso);
        }

        @Override
        protected void onPreExecute() {

            pDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                @Override
                public void onCancel(DialogInterface dialog) {
                    Logeo.this.cancel(true);
                }
            });

            pDialog.setProgress(0);
            pDialog.show();
        }

        @Override
        protected void onPostExecute(Boolean result) {
        	pDialog.dismiss();
        	if(result)
            {                
                Toast.makeText(MainActivity.this, "Datos Correctos!",
                        Toast.LENGTH_SHORT).show();
                               
                Intent siguiente  = new Intent(MainActivity.this,DespachoList.class);
                startActivity(siguiente);
                finish();
                
            }else{
            	       	Toast.makeText(MainActivity.this, mensaje,
		                Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        protected void onCancelled() {
            Toast.makeText(MainActivity.this, "Logeo cancelado!",
                    Toast.LENGTH_SHORT).show();
        }
    }

    private class Verificacion extends AsyncTask<Void, Integer, Boolean> {
    	boolean redireccionar = false;
        @Override
        protected Boolean doInBackground(Void... params) {// verificamos que el usuario este logeado
        	
        	        	
        	DataBaseManager manager = new DataBaseManager(context);
        	Cursor c = manager.leer("userStatus");
        	
        	if(c.getCount()!=0){
        		//no se encontraron registros
        		@SuppressWarnings("static-access")
				int inValue= c.getColumnIndex(manager.CN_VALUE);
        		c.moveToLast();
        		        		
        		if(c.getString(inValue).equals("1")){
        			redireccionar=true;
        		}
        		        		
        	}else{
        		// se redirecciona a la pantalla de entradas y salidas
        		redireccionar=false;
        	}
        	
        	
            return true;
        }
        
       
        @Override
        protected void onProgressUpdate(Integer... values) {
            int progreso = values[0].intValue();
            pDialog.setProgress(progreso);
        }

        @Override
        protected void onPreExecute() {
        	pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            pDialog.setMessage("Verificando datos...");
            pDialog.setCancelable(false);
            pDialog.setMax(100);
            pDialog.setProgress(0);
            pDialog.show();
        }

        @Override
        protected void onPostExecute(Boolean result) {
            if(result)
            {
                pDialog.dismiss();
                Toast.makeText(MainActivity.this, "Verificacion completa!",
                        Toast.LENGTH_SHORT).show();
               if(redireccionar){   
            	   
	                Intent siguiente  = new Intent(MainActivity.this,DespachoList.class);
	                startActivity(siguiente);
	                finish();
               }//fin if
                
            }//fin 1 if
        }//fin funcion

    }//fin subclase

}
